/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

import compilador.analizadorSemantico.tablaSimbolos.TablaSimboloSemantico;


/**
 * @author Nolberto Castellanos Rodriguez
 * @author Yurani Alejandra Salamanca Lotero
 *
 * Clase que representa una sesionIteracion
 */
public class SesionIteracion 
{
	
//	-------------------------------------------------------------------------------------------------
//	ATRIBUTOS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Atributo que contiene una expresionAritmetica
	 */
	private ExpresionAritmetica expresionAritmetica;

	/**
	 * Atributo que contiene una sentenciaAsignacion
	 */
	private SentenciaAsignacion sentenciaAsignacion;
	
//	-------------------------------------------------------------------------------------------------
//	CONTRUCTORES
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Constructor que permite crear una nueva sesionIteracion
	 * @param expresionAritmetica
	 * @param sentenciaAsignacion
	 */
	public SesionIteracion(ExpresionAritmetica expresionAritmetica,
			SentenciaAsignacion sentenciaAsignacion) {
		super();
		this.expresionAritmetica = expresionAritmetica;
		this.sentenciaAsignacion = sentenciaAsignacion;
	}
	
//	-------------------------------------------------------------------------------------------------
//	METODOS
//	-------------------------------------------------------------------------------------------------	
	
	/**
	 * @param ts
	 * @param errores
	 * @param claseActual
	 * @param metodoActual
	 */
	public void analizarSemantica(TablaSimboloSemantico ts,	ArrayList<SimboloError> errores, String claseActual, String metodoActual) {
		if(expresionAritmetica != null)
			expresionAritmetica.analizarSemantica(ts, errores, claseActual, metodoActual);
		
		if(sentenciaAsignacion != null)
			sentenciaAsignacion.AnalizarSemantica(ts, errores, claseActual, metodoActual);
	}
	
	/**
	 * @return
	 */
	public String getJavaCode() {
		if(expresionAritmetica != null)
			return expresionAritmetica.getJavaCode();
		
		if(sentenciaAsignacion != null)
			return sentenciaAsignacion.getJavaCode();
		
		return "";
	}

	
	/**
	 * Metodo que permite agregar hojas al nodo de la clase
	 * @return el nodo de la clase con sus hojas
	 */
	public DefaultMutableTreeNode getArbolVisual(){
		DefaultMutableTreeNode miRaiz =  new  DefaultMutableTreeNode("Sesion Iteracion");
		
		if (expresionAritmetica != null) 
			miRaiz.add(expresionAritmetica.getArbolVisual());
		
		if (sentenciaAsignacion != null)
			miRaiz.add(sentenciaAsignacion.getArbolVisual());
		
		return miRaiz;
	}
	
//	-------------------------------------------------------------------------------------------------
//	GETTERS & SETTERS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Metodo que nos retorna el valor de expresionAritmetica
	 * @return  expresionAritmetica. Valor retornado
	 */
	public ExpresionAritmetica getExpresionAritmetica() {
		return expresionAritmetica;
	}

	/**
	 * Metodo que permite asignar el valor de expresionAritmetica
	 * @param expresionAritmetica. Valor a asignar expresionAritmetica
	 */
	public void setExpresionAritmetica(ExpresionAritmetica expresionAritmetica) {
		this.expresionAritmetica = expresionAritmetica;
	}

	/**
	 * Metodo que nos retorna el valor de sentenciaAsignacion
	 * @return  sentenciaAsignacion. Valor retornado
	 */
	public SentenciaAsignacion getSentenciaAsignacion() {
		return sentenciaAsignacion;
	}

	/**
	 * Metodo que permite asignar el valor de sentenciaAsignacion
	 * @param sentenciaAsignacion. Valor a asignar sentenciaAsignacion
	 */
	public void setSentenciaAsignacion(SentenciaAsignacion sentenciaAsignacion) {
		this.sentenciaAsignacion = sentenciaAsignacion;
	}
}
